package com.tedu.api.list;

import org.junit.Test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * Set集合是Collection集合子接口
 * Set集合接口：无序、无下标、元素不可重复【唯一性】
 * Set集合方法与Collection集合方法【使用一致】
 * add()  remove()  contains()  size()  clear()
 * 使用Iterator迭代器遍历
 * Set集合--接口---无法创建对象---实现类：
 * HashSet：由哈希算法实现，不保证元素顺序，不允许元素重复可以存null
 * LinkedHashSet：【方法与HashSet一致】，由哈希算法实现，保持元素顺序
 *               不允许元素重复，可以存null
 * TreeSet【算法：红黑树】：不可以存null，按照元素自然顺序或者指定比较器进行
 *                元素存储，不允许元素重复
 */
public class SetAPI {
      @Test
    public void testSet(){
          Set<String> set=new HashSet<>();
          set.add("蒸燕尾儿"); set.add("蒸羊羔");
          set.add("烧花鸭"); set.add("烧子鹅");
          set.add("烧花鸭"); set.add(null);
          System.out.println("Set集合"+set);
          boolean b=set.contains("烧花鸭");
          System.out.println("判断Set集合中是否存在【烧花鸭】元素"+b);
          System.out.println("判断Set集合的长度："+set.size());
          //Iterator遍历  set  集合  元素
          //1.通过set集合调用iterator() 获取迭代器实例：Iterator
          Iterator<String> it=set.iterator();
          //2.Iterator遵循：问、取、删   删掉"烧子鹅"元素
          while(it.hasNext()){//问：set集合中是否有元素 有：true
              String str=it.next();//取：set集合元素
              //null  引用类型默认值       不是字符串
              //判断明确的值    必须  ==
              //判断对象       使用     “字符串”.equals(str)  实值
              //                      obj.equals(add)     地址值
              if (str==null){
                  it.remove();//删
              }
          }
          System.out.println("Set集合："+set);
      }
}
